home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / xlisp_21.zoo / xl-004.bug < prev    next >
Internet Message Format  |  1990-02-28  |  2KB

  1. From sce!mitel!uunet!zephyr.ens.tek.com!tekcrl!tekgvs!toma Sun Sep 10 21:19:10 EDT 1989
  2. Article: 148 of comp.lang.lisp.x
  3. Path: cognos!sce!mitel!uunet!zephyr.ens.tek.com!tekcrl!tekgvs!toma
  4. From: toma@tekgvs.LABS.TEK.COM (Tom Almy)
  5. Newsgroups: comp.lang.lisp.x
  6. Subject: save/restore bug fixes!
  7. Message-ID: <5886@tekgvs.LABS.TEK.COM>
  8. Date: 6 Sep 89 13:53:17 GMT
  9. Reply-To: toma@tekgvs.LABS.TEK.COM (Tom Almy)
  10. Organization: Tektronix, Inc., Beaverton,  OR.
  11. Lines: 56
  12.  
  13. OK, so it was pretty schlocky of me to mention my previous fix postings
  14. rather than posting the fixes. I was just too busy to look them up.
  15.  
  16. There is no promise that these changes will fix the problem with xscheme,
  17. but there does seem to be numerous bugs that are in both x's.
  18.  
  19. Tom Almy
  20. toma@tekgvs.labs.tek.com
  21.  
  22.  
  23.  
  24. *******************
  25. Problem: "restore" corrupts system.
  26. Diagnosis: argument stack not being reset -- initial garbage collect
  27.  "marks" random memory!
  28.  
  29. Solution: Add to "initialize" in xlirestore:
  30.  
  31.  
  32.     xlfp = xlsp = xlargstkbase;
  33.     *xlsp++ = NIL;
  34.  
  35.  
  36.  
  37. *******************
  38. Problem: "restore" corrupts system with 8086 compilers.
  39. Diagnosis: cvoptr is doing improper arithmetic.
  40.  
  41. Solution: CVPTR in xlisp.h needs to be defined as 
  42. #define CVPTR(x)    ((((unsigned long)(x) >> 16) << 4) + ((unsigned) x))
  43.  
  44.     return statement in cvoptr() (xlimage.c) needs to be changed from:
  45. return (off + (OFFTYPE)((p - seg->sg_nodes) << 1));
  46.     to:
  47. return (off+(((CVPTR(p)-CVPTR(seg->sg_nodes))/sizeof(struct node))<<1));
  48.  
  49.  
  50. Note: for this to work with non-8086 compilers, the default for CVPTR
  51. should be changed from (x) to ((OFFTYPE)(x)).
  52.  
  53.  
  54. *******************
  55. A third problem that caused more than one restore in a session to fail had
  56. been fixed already in xscheme.  For the record, though:
  57.  
  58. BUG: Any attempt to do more than one RESTORE in a session causes the error
  59.     "insufficient memory - segment".
  60.  
  61. In file xlimage.c, function freeimage(), change
  62.  
  63.         if (((fp = getfile(p)) != 0) && (fp != stdin && fp != stdout))
  64.  
  65. to:
  66.  
  67.         if (((fp = getfile(p)) != 0) && 
  68.              (fp != stdin && fp != stdout && fp != stderr))
  69.  
  70.  
  71.